typedef Object CreateComponentCallback(GameEntity e);
typedef GameEntity CreateEntityCallback(GameEntity e);

class CompositeEntities implements Collection<GameEntity> {
  final List<GameEntity> l;
  
  CompositeEntities([int length]) : l = new List<GameEntity>(length) { }
  CompositeEntities.from(Iterable<GameEntity> other) : l = new List<GameEntity>.from(other) { }
  
  CompositeEntities c(String name, CreateComponentCallback create) {
    return this;
  }
  
  CompositeEntities tag(String item) {
    return this;
  }
  
  CompositeEntities tags(Iterable<String> item) {
    return this;
  }
  
  CompositeEntities child(CreateEntityCallback create) {
    return this;
  }
  
  CompositeEntities on(String event, [GameEntityCommand command, String id]) {
    return this;
  }
  
  CompositeEntities off(String event, [String id]) {
    return this;
  }

  CompositeEntities raise(String event, [arg1, arg2, arg3, arg4]) {
    return this;
  }
  
  CompositeEntities remove([String c, String tag, Iterable<String> tags, String on]) {
    return this;
  }
  
  Iterator<GameEntity> iterator() => l.iterator();
  bool every(bool f(GameEntity element)) => l.every(f);
  Collection<GameEntity> filter(bool f(GameEntity element)) =>l.filter(f);
  void forEach(void f(GameEntity element)) => l.forEach(f);
  bool isEmpty() => l.isEmpty();
  int get length() => l.length;
  Collection map(f(GameEntity element)) => l.map(f);
  bool some(bool f(GameEntity element)) => l.some(f);
}